\section{Python}
Python \cite{SitePython} é uma linguagem de programação de 
multi-paradigmas orientada a objetos e interpretada, que é suportada por várias
plataformas, como Windows e Linux. Foi criada por Guido van Rossum em
1991.

A linguagem Python prioriza a legibilidade do código e a agilizade do produção
em conjunto com uma sintaxe simples e precisa. Além disso, apresenta uma
biblioteca-padrão vasta, oferecendo muitas ferramentas para o desenvolvimento de uma grande gama de programas, incluindo um
bom número de estruturas de dados que são suficientes para grande parte de programação usual.

Um fator interessante que comprova a legibilidade dos códigos-fonte feitos em
Python é que a sua sintaxe é baseada em identação para delimitar estruturas ao
invés de usar chaves como nas linguagens derivadas do C:

\begin{verbatim}
def valor1():
    while True:
        try:
            c = int(raw_input('Primeiro Valor: '))
            return c
        except ValueError:
            print 'Inválido!'

\end{verbatim}

Atualmente a linguagem Python é bastante usada para diversas finalidades pela
sua portabilidade, desde software embarcado a servidores de aplicação. Ela é
utilizada como linguagem de \emph{script} em diversos sistemas, como o GIMP e o
próprio GNOME, servidores de aplicação e computação gráfica.

A utilização da linguagem Python é preferencial pela grande legibilidade e por
oferecer todas as possibilidades citadas, \emph{frameworks} disponíveis e a
vasta biblioteca-padrão. Outro fator importante é a quantidade de tipos de
dados nativos que foram muito utilizados no projeto como os que representam
conjuntos e tuplas:

\begin{table}[!h]
\centering
\begin{tabular}{|c|c|c|}
\hline
\textbf{Tipo} & \textbf{Descrição} & \textbf{Exemplo}\\
\hline
str & string ou cadeia de caracteres & `futebol'\\
\hline
list & lista ordernada & $[$`Palmeiras', `São Paulo'$]$\\
\hline
tuple & tuplas & $($`Palmeiras', `Palestra Itália'$)$\\
\hline
dict & conjunto associativo & \{`Palmeiras':`Palestra Itália',
`São Paulo':`Morumbi'\}\\
\hline
int & inteiro & 0, 67, 379\\
\hline
\end{tabular}
\caption{Exemplos de tipos nativos do Python}
\end{table}

Para o projeto, foi utilizada a versão 2.5, apesar de já existir uma versão 2.6
que prepara os usuário para uma versão 3.0. O uso da versão antiga deve-se a
sua estabilidade e bibliotecas já conhecidas. Caso haja migração para a versão
3.0, todos os projeto deverão ser revistos, pois a retrocompatibilidade não é
garantida.

\begin{figure}[h]
\centering
\includegraphics[width=0.25\textwidth]{imagens/materiais_metodos/python-logo.png}
\caption{Logotipo da linguagem Python}
\end{figure}

\section{NLTK - Natural Language Toolkit}

O NLTK \cite{SiteNLTK} é um grupo de módulos para a linguagem
Python para o processamento de linguagem natural. Foi desenvolvido em conjunto com o
curso de linguistica computacional da Univerdade da Pennsylvania em 2001.
\cite{BIRD2004}

Ele contém módulos específicos como
os \emph{Tokenizadores} para quebra de texto, analisadores sintáticos,
semânticos e, em conjunto, cerca de 40 \emph{corpora} para fazer comparações e
usar como parâmetros.

A estrutura do NLTK centra-se nesses quatro pontos:
\begin{itemize}
  \item \textbf{Simplicidade}: o \emph{framework} é construído de forma simples
  para que o usuário possar facilmente chamar as suas funções;
  \item \textbf{Consistência}: houve um esforço para que as estruturas de dados
  e interfaces dos módulos fosse consistentes;
  \item \textbf{Extensibilidade}: o \emph{toolkit} acomoda novos componentes
  para replicar ou estender funcionalidades
  \item \textbf{Modularidade}: todos os componentes do NLTK são dividos em
  módulos com interfaces bem definidas.
\end{itemize}

No site do projeto há o livro \emph{NLTK Book} \cite{BIRD2008} que
contém exemplos do uso do NLTK com a teoria de processamento de linguagem natural.

\section{TreeTagger - Etiquetador Gramatical}

\emph{TreeTagger} é um POS Tagger independente de linguagem desenvolvido pelo
Instituto de Linguística Computacional da Universidade de Stuttgart. Foi usado
com sucesso para línguas como Inglês, Francês, Alemão, Português, Espanhol,
Italiano, Grego e Chinês. É facilmente adaptável à outras línguas se houver um
um \emph{corpus} já etiquetado com uma lista de \emph{tags}. \cite{SiteDTT}
\cite{SCHMID} \cite{SCHMIDa}

É um etiquetador que usa árvores de decisão no seu treinamento
com um \emph{corpus} já etiquetado. Para esse projeto, foi usada uma versão
com um \emph{corpus} de língua portuguesa já treinado por Pablo Gamallo da Universidade
de Santiago de Compostela. \cite{SiteTreeTagger}

\section{Eclipse - IDE}
A IDE Eclipse \cite{SiteEclipse} é um ambiente de programação de licença livre
que permite o desenvolvimento de software em várias linguagens de programação,
sendo Java a principal. Ele é mantido pela fundação Eclipse que inicialmente
foi criada por um consórcio das empresas Borland, IBM, MERANT, QNX Software
Systems, Rational Software, Red Hat, SuSE, TogetherSoft e Webgain.

Contendo uma boa usabilidade, a IDE Eclipse possui recursos de complementação
de código, sugestões e detecção de erros. Além disso, contém muitos \emph{plugins} que
permitem estender as funcionalidades da IDE. Assim, a Eclipse suportas as
linguaens de programação Java, C/C++, Python, Ruby etc.

Esses \emph{plugins} têm a vantagem de implementar novas funcionalidades à
IDE Eclipse, o que permite o uso de várias funcionalidades integradas, como
editor de Latex e controlador de versões SVN.

Esse ambiente foi escolhido ao projeto pela familiaridade dos desenvolvedores
com a ferramenta e o vasto conhecimento que há na comunidade de software livre sobre os \emph{plugins}.

\begin{figure}[htp]
\centering
\includegraphics[width=0.75\textwidth]{imagens/materiais_metodos/eclipse.png}
\caption{IDE Eclipse}
\end{figure}

Foi usada a versão 3.4 que tem o nome de Ganymede.

\section{Complemento de IDE - Pydev}
Pydev \cite{SitePydev} é um \emph{plugin} para o Eclipse cujo objetivo é integrar a
linguagem Python à IDE Eclipse.

Com ele pode-se desenvolver módulos e pacotes Python e obter os benefícios de
depuração de código que o Eclipse fornece. Outro benefício é as outras
extensões de controle de versão que integram a plataforma.

\section{Framework - Django}
Django \cite{SiteDjango} é um \emph{framework} para
desenvolvimento web para a linguagem de programação Python. Ele inclui todos os
componentes relevantes a este desenvolvimento, incluindo a camada de persistência e exibição, permitindo que se desenvolva um aplicativo
web com arquitetura de camadas bem definidas. Atualmente, é recomendado pelo
próprio criador da linguagem, Guido van Rossum, para este tipo de
desenvolvimento. \cite{HOLOVATY2006}

Sua utilização ajuda na interface do buscador, e, mais
importante, a camada de persistência, para armazenar os resultados da extração
no banco de dados.

\section{GTK+ - Gnome Toolkit}
GTK+ \cite{SiteGTK} é um \emph{toolkit} multi-plataforma para a
construção de interfaces gráficas. Seu nome completo é \textbf{GIMP Toolkit}.

Apesar de ser construída em C, o GTK tem ligações com muitas outras linguagens
de programação como o próprio C, Java, Python, Ruby, entre outras..

Em relação à parte gráfica, o GTK+ tem recursos como temas, integração com a
base gráfica do Sistema Operacional, conhecido como \emph{look-and-feel},
suporte a internacionalização e localização etc. Ele implementa as prinicipais
interfaces gráficas conhecidas como botões, janelas, displays, menus, toolbars, caixas de texto, layouts etc.

\begin{figure}[h]
\centering
\includegraphics[width=0.25\textwidth]{imagens/materiais_metodos/gtk-logo.png}
\caption{Logotipo do GTK+}
\end{figure}

\section{Glade}
Glade \cite{SiteGlade} é um construtor de interface gráfica para GTK e
GNOME licenciado pela GNU GPL e é distribuído na versão 3.4. Por esse motivo é
uma ferramenta RAD pois propicia o rápido desenvolvimento de interface gráfica.

O arquivo de desenho é gravado no formato XML e pode ser usado em várias
linguagens de programação, especialmente Python.

\begin{figure}[h]
\centering
\includegraphics[width=0.75\textwidth]{imagens/materiais_metodos/glade-tela.png}
\caption{Tela do Glade}
\end{figure}

\section{SVN - Controle de Versões}
Para o controle de versões dos códigos é usado o Subversion, também
conhecido como SVN. \cite{SiteSubversion}Essa ferramenta é utilizada para o controle de
versões do código, que pode ser alterado pelos 2 membros da equipe ao mesmo tempo e também
pela necessidade de replicação por segurança, ou seja, evitar perdas de código
ou voltar para um versão anterior. Também tem recursos de travamento de
arquivo, impedindo a sua edição e \emph{merge} de versões.

Funciona as principais plataformas como Unix, Win32, BeOS, OS/2, MacOS X e
Linux e é mantido pela comunidade chamada Tigris.org. É usadas nos principais
projetos de código aberto como Apache Software Foundation, KDE, GNOME, Free
Pascal, FreeBSD, GCC, Python, Django, Ruby, Mono, SourceForge.net, entre outros.

Uma necessidade é um servidor para armazenamento das versões, 
e para isso foi utilizado o serviço de hospedagem do Google \cite{SiteGoogleCode}. 
Para a integração com a IDE, foi utilizado um \emph{plugin} do Eclipse
chamado SubEclipse \cite{SiteSubclipse}.

\begin{figure}[htp]
\centering
\includegraphics[width=0.50\textwidth]{imagens/materiais_metodos/svn-logo.png}
\caption{Logotipo do SVN}
\end{figure}

\section{PostgreSQL}
PostgreSQL \cite{SitePostgre} é um sistema gerenciador de banco de dados relacional
distribuído em código aberto. Ele é famoso pelos seus recursos e por ser um
dos bancos de dados mais usados na comunidade de software livre.

Ele é totalmente compatível com as plataformas UNIX (AIX, BSD, HP-UX, SGI IRIX,
Mac OS X, Solaris, Tru64), Linux e Windows e tem ligações com as principais
linguagens de programação como Java (JDBC), ODBC, Perl, Python, Ruby, C, C++,
PHP, Lisp, Scheme, Qt e tantas outras.

É totalmente ACID, ou seja, respeita atomicidade, consistência, integridade
e durabilidade. Além de suportar vários tipos de campos como binário, imagens,
audio e vídeo, além dos tipos definidos em ANSI-SQL92/99 \cite{SiteSQL} como
INTEGER, NUMERIC, BOOLEAN, CHAR, VARCHAR, DATE, INTERVAL, and TIMESTAMP.

O PostgreSQL também roda \emph{store procedures} nas mais variadas linguagens
de programação como Java, Perl, Python, Ruby, Tcl, C/C++ e o próprio PL/pgSQL.

Para ter-se uma idéia da robustez do PostgreSQL, aqui mostra-se uma tabela com
as informações sobre armazenamento:

\begin{table}[!h]
\centering
\begin{tabular}{|c|c|}
\hline
\textbf{\emph{Limite}}  & \textbf{Valor}\\
\hline
Tamanho máximo de um banco de dados & Sem limites\\
\hline
Tamanho máximo de uma tabela & 32 TB\\
\hline
Tamanho máximo de uma linha & 1.6 TB\\
\hline
Tamanho máximo de um campo & 1 GB\\
\hline
Quantidade máxima de linhas por tabela & Sem limites\\
\hline
Quantidade máxima de colunas por tabela & 250 -- 1600\\
\hline
Quantidade máxima de índices por tabela & Sem limites\\
\hline
\end{tabular}
\caption{Limites gerais do banco de dados PostgreSQL}
\end{table}

Os recursos mais atraentes são a grande capacidade de armazenamento, criação de
índices e desempenho competitivo. Também contém muito conhecimento distribuído
pela comunidade, o que o tornou muito atrativo ao projeto.

\begin{figure}[htp]
\centering
\includegraphics[width=0.25\textwidth]{imagens/materiais_metodos/Pg-logo.png}
\caption{Logotipo do PostgreSQL}
\end{figure}

Para o projeto foi usada a versão 8.3.

\section{PgAdmin III}
PgAdmin \cite{SitePgAdmin} gráfica para o gerencimanento do banco de dados
PostgreSQL.

Nele é possível inserir consultas SQL via interface gráfica e obter as
respostas sobre essa mesma interface. Também é possível criar novas tabelas e
banco de dados e fazer as operações que o PostgreSQL fornece.

\begin{figure}[htp]
\centering
\includegraphics[width=0.5\textwidth]{imagens/materiais_metodos/pgadmin-tela.png}
\caption{Tela do PgAdmin III}
\end{figure}
